﻿<!DOCTYPE HTML>
<html lang="zh">
<head>
<title>DriveEject / DriveRetract - 语法 &amp; 使用 | AutoHotkey v2</title>
<meta name="description" content="The DriveEject and DriveRetract functions eject or retract the tray of the specified CD/DVD drive, or eject a removable drive." />
<meta name="ahk:equiv-v1" content="commands/Drive.htm#Eject" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
<script type="text/javascript">$(function(){0<=window.navigator.userAgent.toLowerCase().indexOf("ucbrowser")&&CaoNiMaDeUc()})</script>
</head>
<body>

<h1>DriveEject / DriveRetract</h1>

<p>弹出或收回指定 CD/DVD 驱动器的托盘, 或弹出一个可移动驱动器.</p>

<pre class="Syntax"><span class="func">DriveEject</span> <span class="optional">Drive</span>
<span class="func">DriveRetract</span> <span class="optional">Drive</span></pre>

<h2 id="Parameters">参数</h2>
<dl>
    <dt>Drive</dt>
  
    <dd>
        <p>类型: <a href="../Concepts.htm#strings">字符串</a></p>
        <p>驱动器的字母, 后面跟着可选的冒号或冒号和反斜杠. 例如, <code>D</code>, <code class="no-highlight">D:</code> 或 <code>D:\</code>.</p>
        <p>这也可以是一个设备路径, 形式为 <code>\\?\Volume{...}</code>, 可以通过在命令行运行 <a href="https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/mountvol">mountvol</a> 来发现. 在这种情况下, 不需要为驱动器分配一个盘符.</p>
        <p>如果省略, 则默认为通过从 A 到 Z 的迭代找到的第一个 CD/DVD 驱动器. 如果没有找到驱动器, 则抛出异常.</p>
    </dd>

</dl>

<h2 id="Error_Handling">错误处理</h2>
<p>如果检测到失败, 则抛出异常.</p>
<p>这两个函数可能无法在网络驱动器或资源管理器中没有 "弹出" 选项的任何驱动器上工作. 底层的系统函数并不总是报告失败, 所以可能会或不会抛出一个异常.</p>

<h2 id="Remarks">备注</h2>
<p>在允许脚本继续之前, 函数会等待弹出或收回完成.</p>

<p>可以通过测量函数完成所需的时间来判断之前的托盘状态, 如<a href="#ExToggle">下例</a>所示.</p>
<p>弹出一个可移动驱动器通常相当于在资源管理器中使用 "弹出" 上下文菜单选项, 但是如果文件正在使用不会显示警告. 与安全移除硬件选项不同, 这只卸载由 <em>Drive</em> 参数标识的卷, 而不是整个设备.</p>
<p>DriveEject 和 DriveRetract 对应于 <a href="https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddstor/ni-ntddstor-ioctl_storage_eject_media">IOCTL_STORAGE_EJECT_MEDIA</a> 和 <a href="https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddstor/ni-ntddstor-ioctl_storage_load_media">IOCTL_STORAGE_LOAD_MEDIA</a> 控制代码, 它们也可能对 CD/DVD 以外的驱动器类型产生影响, 比如磁带驱动器.</p>

<h2 id="Related">相关</h2>
<p><a href="DriveGetStatusCD.htm">DriveGetStatusCD</a>, <a href="Drive.htm">驱动器函数</a></p>

<h2 id="Examples">示例</h2>
<div class="ex" id="ExEject">
<p><a class="ex_number" href="#ExEject"></a> 弹出(打开) 首个 CD/DVD 驱动器.</p>
<pre>DriveEject()</pre>
</div>

<div class="ex" id="ExRetract">
<p><a class="ex_number" href="#ExRetract"></a> 收回(关闭) 第一个 CD/DVD 驱动器的托盘.</p>
<pre>DriveRetract()</pre>
</div>

<div class="ex" id="ExEjectAll">
<p><a class="ex_number" href="#ExEjectAll"></a> 弹出所有可移动驱动器(CD/DVD 驱动器除外).</p>
<pre>Loop Parse DriveGetList("REMOVABLE")
{
    if MsgBox("Eject " A_LoopField ":, even if files are open?",, "y/n") = "yes"
        DriveEject(A_LoopField)
}
else
    MsgBox "No removable drives found."</pre>
</div>

<div class="ex" id="ExToggle">
<p><a class="ex_number" href="#ExToggle"></a> 定义一个热键, 根据函数完成的时间, 将托盘切换到相反的状态(打开或关闭).</p>
<pre>#c::
{
    DriveEject
    <em>; 如果函数快速完成, 则托盘已经处于弹出状态.
    ; 在这种情况下, 收回托盘:</em>
    if (A_TimeSinceThisHotkey &lt; 1000)  <em>; 如果需要, 可调整这个时间.</em>
        DriveRetract
}</pre>
</div>

</body>
</html>